﻿using System;
using System.Collections.Generic;

using System.Web;
using System.Net.Mail;
using System.Configuration;
using System.Net;
using System.Text;

namespace GO
{
    public class Mail
    {
        private static string strSMTP;
        private static string strFrom;
        private static string strFromNome;
        private static string strTo;
        private static string strBcc;
        private static string strAutenticaUser;
        private static string strAutenticaSenha;

        public struct EstruturaEmail
        {
            private String mailTo;
            private String mailSubject;
            private AttachmentCollection mAnexos;
            private String corpoEmail;

            public String MailTo
            {
                get { return mailTo; }
                set { mailTo = value; }
            }

            public String MailSubject
            {
                get { return mailSubject; }
                set { mailSubject = value; }
            }

            public AttachmentCollection Anexos
            {
                get { return mAnexos; }
                set { mAnexos = value; }
            }

            public String CorpoEmail
            {
                get { return corpoEmail; }
                set { corpoEmail = value; }
            }
        }

        public static void EnviaEmail(EstruturaEmail estrutura)
        {
            strSMTP = ConfigurationManager.AppSettings["MAILSmtp"].ToString();
            strFrom = ConfigurationManager.AppSettings["MAILFrom"].ToString();
            strFromNome = ConfigurationManager.AppSettings["MAILNomeFrom"].ToString();
            strTo = ConfigurationManager.AppSettings["MAILTo"].ToString();
            strBcc = ConfigurationManager.AppSettings["MAILBcc"].ToString();
            strAutenticaUser = ConfigurationManager.AppSettings["MAILAutenticaUser"].ToString();
            strAutenticaSenha = ConfigurationManager.AppSettings["MAILAutenticaSenha"].ToString();

            using (MailMessage email = new MailMessage())
            {
                String encode = "ISO-8859-1";
                System.Net.NetworkCredential objSMTPUserInfo = new System.Net.NetworkCredential();
                SmtpClient objSmtpClient = new SmtpClient();

                // SE DESTINATÁRIO NÃO FOI DEFINIDO, UTILIZA O DO WEB.CONFIG
                if (string.IsNullOrEmpty(estrutura.MailTo))
                    estrutura.MailTo = strTo;

                // ADICIONA DESTINATÁRIOS
                string[] arrTo = estrutura.MailTo.Split(';');
                foreach (string To in arrTo)
                    email.To.Add(To);

                // ADICIONA ANEXOS
                if (estrutura.Anexos != null)
                    foreach (Attachment anexo in estrutura.Anexos)
                        email.Attachments.Add(anexo);

                // ADICIONA CÓPIAS OCULTAS
                if (!string.IsNullOrEmpty(strBcc))
                {
                    string[] arrBcc = strBcc.Split(';');
                    foreach (string Bcc in arrBcc)
                        email.Bcc.Add(Bcc);
                }

                email.From = new MailAddress(strFrom, strFromNome);
                email.Subject = estrutura.MailSubject;
                email.SubjectEncoding = Encoding.GetEncoding(encode);
                email.IsBodyHtml = true;
                email.Body = estrutura.CorpoEmail;

                try
                {
                    SmtpClient smtp = new SmtpClient();
                    smtp.Host = strSMTP;
                    smtp.Credentials = new NetworkCredential(strAutenticaUser, strAutenticaSenha);
                    smtp.Send(email);
                }
                catch (Exception E)
                {
                    throw E;
                }
            }
        }
    }
}